﻿using Newtonsoft.Json;

namespace TY.UT.Push.YouMeng
{
    /// <summary>
    /// 安卓推送消息模型
    /// </summary>
    public class AndroidMsgModel : BaseModel
    {
        /// <summary>
        /// 必填 消息内容(Android最大为1840B), 包含参数说明如下(JSON格式):
        /// </summary>
        [JsonProperty("payload")]
        public AndroidPayLoad PaLoadMsg { get; set; }
        /// <summary>
        /// 可选 发送策略
        /// </summary>
        [JsonProperty("policy")]
        public AndroidPolicy PolicySet { get; set; }

        /// <summary>
        /// 可选 发送消息描述，建议填写。
        /// </summary>
        [JsonProperty("description")]
        public string Description { get; set; }
        /// <summary>
        /// "true/false"  可选 正式/测试模式。测试模式下，只会将消息发给测试设备。
        ///测试设备需要到web上添加。
        ///Android: 测试设备属于正式设备的一个子集。
        /// </summary>
        [JsonProperty("production_mode")]
        public string ProductMode { get; set; }
    }

    /// <summary>
    /// 消息内容实体
    /// </summary>
    public class AndroidPayLoad
    {
        /// <summary>
        /// 必填 消息类型，值可以为:
        /// notification-通知，message-消息
        /// </summary>
        [JsonProperty("display_type")]
        public string DisplayType { get; set; }

        /// <summary>
        /// 必填 消息体。
        ///display_type=message时,body的内容只需填写custom字段。
        ///display_type=notification时,
        /// </summary>
        [JsonProperty("body")]
        public AndroidBody MsgBody { get; set; }

        /// <summary>
        /// // 可选 用户自定义key-value。只对"通知"
        ///(display_type=notification)生效。
        ///可以配合通知到达后,打开App,打开URL,打开Activity使用。
        /// </summary>
        //[JsonProperty("extra")]
        //public string Extra { get; set; }
    }

    /// <summary>
    /// 消息body实体
    /// </summary>
    public class AndroidBody
    {
        /// <summary>
        /// 必填 通知栏提示文字
        /// </summary>
        [JsonProperty("ticker")]
        public string Ticker { get; set; }

        /// <summary>
        /// 必填 通知标题
        /// </summary>
        [JsonProperty("title")]
        public string Title { get; set; }
        /// <summary>
        /// 必填 通知文字描述 
        /// </summary>
        [JsonProperty("text")]
        public string Text { get; set; }

        /// <summary>
        ///可选 状态栏图标ID, R.drawable.[smallIcon],
        ///如果没有, 默认使用应用图标。
        ///图片要求为24*24dp的图标,或24*24px放在drawable-mdpi下。
        ///注意四周各留1个dp的空白像素
        /// </summary>
        //[JsonProperty("icon")]
        //public string Icon { get; set; }

        /// <summary>
        /// 可选 通知栏拉开后左侧图标ID, R.drawable.[largeIcon].
        /// 图片要求为64*64dp的图标,
        ///可设计一张64*64px放在drawable-mdpi下,
        ///注意图片四周留空，不至于显示太拥挤
        /// </summary>
        //[JsonProperty("largeIcon")]
        //public string LareIcon { get; set; }

        /// <summary>
        ///  可选 通知栏大图标的URL链接。该字段的优先级大于largeIcon。
        /// </summary>
        //[JsonProperty("img")]
        //public string Img { get; set; }

        /// <summary>
        /// 可选 通知声音，R.raw.[sound]. 
        /// 如果该字段为空，采用SDK默认的声音, 即res/raw/下的
        /// umeng_push_notification_default_sound声音文件
        /// 如果SDK默认声音文件不存在，
        /// 则使用系统默认的Notification提示音。
        /// </summary>
        //[JsonProperty("sound")]
        //public string Sound { get; set; }

        /// <summary>
        ///可选 默认为0，用于标识该通知采用的样式。使用该参数时, 
        ///开发者必须在SDK里面实现自定义通知栏样式。
        /// </summary>
        //[JsonProperty("builder_id")]
        //public string BuiderId { get; set; }

        /// <summary>
        /// 可选 收到通知是否震动,默认为"true".
        /// </summary>
        //[JsonProperty("play_vibrate")]
        //public string PlayVibrate { get; set; }

        /// <summary>
        /// 可选 收到通知是否闪灯,默认为"true"
        /// </summary>
        //[JsonProperty("play_lights")]
        //public string PlayLights { get; set; }

        /// <summary>
        /// 可选 收到通知是否发出声音,默认为"true"
        /// </summary>
        //[JsonProperty("play_sound")]
        //public string PlaySound { get; set; }

        /// <summary>
        /// // 必填 值可以为:
        /// "go_app": 打开应用
        /// "go_url": 跳转到URL
        /// "go_activity": 打开特定的activity
        /// "go_custom": 用户自定义内容。
        /// </summary>
        [JsonProperty("after_open")]
        public string AfterOpen { get; set; }

        /// <summary>
        /// // 可选 当"after_open"为"go_url"时，必填。
        /// 通知栏点击后跳转的URL，要求以http或者https开头
        /// </summary>
        //[JsonProperty("url")]
        //public string AfterOpenUrl { get; set; }

        /// <summary>
        /// // 可选 当"after_open"为"go_activity"时，必填。
        /// 通知栏点击后打开的Activity
        /// </summary>
        //[JsonProperty("activity")]
        //public string Activity { get; set; }

        /// <summary>
        ///  // 可选 display_type=message, 或者
        /// display_type=notification且
        /// "after_open"为"go_custom"时，
        ///该字段必填。用户自定义内容, 可以为字符串或者JSON格式。
        /// </summary>
        //[JsonProperty("custom")]
        //public string Custom { get; set; }
    }

    /// <summary>
    /// 发送策略实体
    /// </summary> 
    public class AndroidPolicy
    {
        /// <summary>
        /// 可选 消息过期时间,其值不可小于发送时间或者
        /// start_time(如果填写了的话), 
        /// 如果不填写此参数，默认为3天后过期。格式同start_time
        /// </summary>
        [JsonProperty("expire_time")]
        public string ExpireTime { get; set; }
    }

}
